home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / prgtools / programm.ing / rsc2obj.lzh / RESOURCE / RSC_GOBJ.C < prev    next >
Encoding:
C/C++ Source or Header  |  1991-02-27  |  3.7 KB  |  133 lines

  1. #include <stddef.h>
  2. #include <aes.h>
  3.  
  4. #define FALSE 0
  5. #define TRUE  1
  6.  
  7. int rsrc_gobject(RSHDR *rsc, int re_gtype, int re_gindex, void **gaddr )
  8. {
  9.     *gaddr = NULL;
  10.     switch (re_gtype)
  11.     {
  12.         case R_TREE     :
  13.             if ((re_gindex >= 0) && (re_gindex < rsc->rsh_ntree))
  14.             {
  15.                 *gaddr = ((OBJECT**)(rsc->rsh_trindex + (long)rsc))[re_gindex];
  16.                 return(TRUE);
  17.             }
  18.             break;
  19.         case R_OBJECT   :
  20.             if ((re_gindex >= 0) && (re_gindex < rsc->rsh_nobs))
  21.             {
  22.                 *gaddr = (OBJECT*)(rsc->rsh_object + (long)rsc + sizeof(OBJECT)*re_gindex);
  23.                 return(TRUE);
  24.             }
  25.             break;
  26.         case R_TEDINFO  :
  27.             if ((re_gindex >= 0) && (re_gindex < rsc->rsh_nted))
  28.             {
  29.                 *gaddr = (TEDINFO*)(rsc->rsh_tedinfo + (long)rsc + sizeof(TEDINFO)*re_gindex);
  30.                 return(TRUE);
  31.             }
  32.             break;
  33.         case R_ICONBLK  :
  34.             if ((re_gindex >= 0) && (re_gindex < rsc->rsh_nib))
  35.             {
  36.                 *gaddr = (ICONBLK*)(rsc->rsh_iconblk + (long)rsc + 34UL*re_gindex); /* 34 = (sizeof(ICONBLK)-2) */
  37.                 return(TRUE);
  38.             }
  39.             break;
  40.         case R_BITBLK   :
  41.             if ((re_gindex >= 0) && (re_gindex < rsc->rsh_nbb))
  42.             {
  43.                 *gaddr = (BITBLK*)(rsc->rsh_bitblk + (long)rsc + sizeof(BITBLK)*re_gindex);
  44.                 return(TRUE);
  45.             }
  46.             break;
  47.         case R_STRING   :
  48.             if ((re_gindex >= 0) && (re_gindex < rsc->rsh_nstring))
  49.             {
  50.                 *gaddr = (char**)(rsc->rsh_string + (long)rsc + sizeof(void*)*re_gindex);
  51.                 return(TRUE);
  52.             }
  53.             break;
  54.         case R_IMAGEDATA:
  55.             if ((re_gindex >= 0) && (re_gindex < rsc->rsh_nimages))
  56.             {
  57.                 *gaddr = (char**)(rsc->rsh_imdata + (long)rsc + sizeof(void*)*re_gindex);
  58.                 return(TRUE);
  59.             }
  60.             break;
  61.         case R_OBSPEC   :
  62.             if ((re_gindex >= 0) && (re_gindex < rsc->rsh_nobs))
  63.             {
  64.                 *gaddr = (void*)((OBJECT*)(rsc->rsh_object + (long)rsc + sizeof(OBJECT)*re_gindex))->ob_spec.index;
  65.                 return(TRUE);
  66.             }
  67.             break;
  68.         case R_TEPTEXT  :
  69.             if ((re_gindex >= 0) && (re_gindex < rsc->rsh_nted))
  70.             {
  71.                 *gaddr = ((TEDINFO*)(rsc->rsh_tedinfo + (long)rsc + sizeof(TEDINFO)*re_gindex))->te_ptext;
  72.                 return(TRUE);
  73.             }
  74.             break;
  75.         case R_TEPTMPLT :
  76.             if ((re_gindex >= 0) && (re_gindex < rsc->rsh_nted))
  77.             {
  78.                 *gaddr = ((TEDINFO*)(rsc->rsh_tedinfo + (long)rsc + sizeof(TEDINFO)*re_gindex))->te_ptmplt;
  79.                 return(TRUE);
  80.             }
  81.             break;
  82.         case R_TEPVALID :
  83.             if ((re_gindex >= 0) && (re_gindex < rsc->rsh_nted))
  84.             {
  85.                 *gaddr = ((TEDINFO*)(rsc->rsh_tedinfo + (long)rsc + sizeof(TEDINFO)*re_gindex))->te_pvalid;
  86.                 return(TRUE);
  87.             }
  88.             break;
  89.         case R_IBPMASK  :
  90.             if ((re_gindex >= 0) && (re_gindex < rsc->rsh_nib))
  91.             {
  92.                 *gaddr = ((ICONBLK*)(rsc->rsh_iconblk + (long)rsc + 34UL*re_gindex))->ib_pmask; /* 34 = (sizeof(ICONBLK)-2) */
  93.                 return(TRUE);
  94.             }
  95.             break;
  96.         case R_IBPDATA  :
  97.             if ((re_gindex >= 0) && (re_gindex < rsc->rsh_nib))
  98.             {
  99.                 *gaddr = ((ICONBLK*)(rsc->rsh_iconblk + (long)rsc + 34UL*re_gindex))->ib_pdata; /* 34 = (sizeof(ICONBLK)-2) */
  100.                 return(TRUE);
  101.             }
  102.             break;
  103.         case R_IPBTEXT  :
  104.             if ((re_gindex >= 0) && (re_gindex < rsc->rsh_nib))
  105.             {
  106.                 *gaddr = ((ICONBLK*)(rsc->rsh_iconblk + (long)rsc + 34UL*re_gindex))->ib_ptext; /* 34 = (sizeof(ICONBLK)-2) */
  107.                 return(TRUE);
  108.             }
  109.             break;
  110.         case R_BIPDATA  :
  111.             if ((re_gindex >= 0) && (re_gindex < rsc->rsh_nbb))
  112.             {
  113.                 *gaddr = ((BITBLK*)(rsc->rsh_bitblk + (long)rsc + sizeof(BITBLK)*re_gindex))->bi_pdata;
  114.                 return(TRUE);
  115.             }
  116.             break;
  117.         case R_FRSTR    :
  118.             if ((re_gindex >= 0) && (re_gindex < rsc->rsh_nstring))
  119.             {
  120.                 *gaddr = (char**)(rsc->rsh_frstr + (long)rsc + sizeof(void*)*re_gindex);
  121.                 return(TRUE);
  122.             }
  123.             break;
  124.         case R_FRIMG    :
  125.             if ((re_gindex >= 0) && (re_gindex < rsc->rsh_nimages))
  126.             {
  127.                 *gaddr = (char**)(rsc->rsh_frimg + (long)rsc + sizeof(void*)*re_gindex);
  128.                 return(TRUE);
  129.             }
  130.     }
  131.     return(FALSE);
  132. }
  133.